package com.carbeauty.config;

import com.carbeauty.common.enums.UserRole;
import com.carbeauty.entity.User;
import com.carbeauty.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
 * 数据初始化配置
 *
 * 功能说明:
 * - 系统启动时自动初始化基础数据
 * - 创建默认管理员账号
 * - 初始化字典数据
 * - 创建示例数据
 *
 * @author CarBeauty Team
 */
@Configuration
public class DataInitConfig {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private PasswordEncoder passwordEncoder;
    
    /**
     * 数据初始化命令行运行器
     * 在应用启动完成后执行数据初始化
     */
    @Bean
    @Order(1)
    public CommandLineRunner initData() {
        return args -> {
            System.out.println("=================================");
            System.out.println("🚀 开始初始化系统数据...");
            
            // 这里可以添加数据初始化逻辑
            // 例如：检查并创建默认管理员账号
            initDefaultAdmin();
            
            // 初始化字典数据
            initDictionaryData();
            
            // 初始化示例数据
            initSampleData();
            
            System.out.println("✅ 系统数据初始化完成！");
            System.out.println("=================================");
        };
    }
    
    /**
     * 初始化默认管理员账号
     */
    private void initDefaultAdmin() {
        System.out.println("📝 检查默认管理员账号...");

        // 检查是否存在管理员账号
        if (!userRepository.existsByUsername("admin")) {
            // 创建默认管理员
            User admin = new User();
            admin.setUsername("admin");
            admin.setPassword(passwordEncoder.encode("admin123"));
            admin.setRealName("系统管理员");
            admin.setRole(UserRole.ADMIN);
            admin.setPhone("13800138000");
            admin.setEmail("admin@carbeauty.com");

            userRepository.save(admin);
            System.out.println("✅ 创建默认管理员账号成功");
        } else {
            System.out.println("✅ 管理员账号已存在");
        }

        System.out.println("👤 默认管理员账号: admin");
        System.out.println("🔑 默认密码: admin123");
    }
    
    /**
     * 初始化字典数据
     */
    private void initDictionaryData() {
        System.out.println("📚 初始化字典数据...");
        
        // TODO: 实现字典数据初始化
        // 1. 服务分类字典
        // 2. 材料分类字典  
        // 3. 会员等级字典
        // 4. 客户来源字典
        // 5. 车辆品牌字典
        // 6. 车辆颜色字典
        
        System.out.println("✅ 字典数据初始化完成");
    }
    
    /**
     * 初始化示例数据
     */
    private void initSampleData() {
        System.out.println("🎯 初始化示例数据...");
        
        // TODO: 实现示例数据创建
        // 1. 创建示例客户
        // 2. 创建示例服务项目
        // 3. 创建示例材料
        // 4. 创建示例订单
        
        System.out.println("✅ 示例数据初始化完成");
    }
    
    /**
     * 系统信息展示
     */
    @Bean
    @Order(2)
    public CommandLineRunner showSystemInfo() {
        return args -> {
            System.out.println();
            System.out.println("🎉 汽车美容管理系统启动成功！");
            System.out.println();
            System.out.println("📋 系统信息:");
            System.out.println("   ├── 系统名称: 汽车美容管理系统");
            System.out.println("   ├── 系统版本: v1.0.0");
            System.out.println("   ├── 技术栈: Spring Boot 3.2.0 + JPA + MySQL");
            System.out.println("   └── 开发团队: CarBeauty Team");
            System.out.println();
            System.out.println("🌐 访问地址:");
            System.out.println("   ├── 系统首页: http://localhost:8080");
            System.out.println("   ├── 管理后台: http://localhost:8080/admin");
            System.out.println("   └── API文档: http://localhost:8080/swagger-ui.html");
            System.out.println();
            System.out.println("👤 默认账号:");
            System.out.println("   ├── 管理员: admin / admin123");
            System.out.println("   ├── 店长: manager / manager123");
            System.out.println("   ├── 员工: employee / employee123");
            System.out.println("   └── 客户: customer / customer123");
            System.out.println();
            System.out.println("🔧 主要功能:");
            System.out.println("   ├── 👥 客户管理 - 客户信息、会员等级、消费记录");
            System.out.println("   ├── 📦 材料管理 - 库存管理、供应商管理、预警提醒");
            System.out.println("   ├── 📊 报表管理 - 营业统计、客户分析、数据报表");
            System.out.println("   ├── 🛠️ 美容项目管理 - 服务项目、价格管理、时长管理");
            System.out.println("   ├── 🏪 门店业务管理 - 订单管理、服务流程、员工管理");
            System.out.println("   ├── 💰 费用管理 - 费用记录、审批流程、统计分析");
            System.out.println("   ├── 🧴 胶水管理 - 专业胶水产品管理");
            System.out.println("   ├── 📋 库存管理 - 入库出库、库存预警、盘点管理");
            System.out.println("   ├── 📚 字典管理 - 系统字典、分类管理、配置管理");
            System.out.println("   └── 💳 充值余额管理 - 客户充值、余额管理、消费记录");
            System.out.println();
            System.out.println("🎨 界面特色:");
            System.out.println("   ├── 现代化UI设计 - Bootstrap 5 + 渐变色彩");
            System.out.println("   ├── 响应式布局 - 完美适配桌面端和移动端");
            System.out.println("   ├── 流畅动画效果 - 悬停效果和过渡动画");
            System.out.println("   └── 多角色权限控制 - 管理员/店长/员工/客户");
            System.out.println();
            System.out.println("🔒 安全特性:");
            System.out.println("   ├── Spring Security 安全认证");
            System.out.println("   ├── BCrypt 密码加密");
            System.out.println("   ├── 角色权限控制");
            System.out.println("   ├── 会话管理");
            System.out.println("   └── CSRF 保护");
            System.out.println();
            System.out.println("📈 数据库特性:");
            System.out.println("   ├── JPA 自动建表");
            System.out.println("   ├── 软删除设计");
            System.out.println("   ├── 审计字段自动填充");
            System.out.println("   ├── 索引优化查询性能");
            System.out.println("   └── 无强制外键约束");
            System.out.println();
            System.out.println("🚀 准备就绪，开始使用吧！");
            System.out.println("=================================");
        };
    }
}
